<?php

namespace App\Controllers;

use Framework\Database;
use Framework\Validation;
use Framework\Session;

class UserController {
    protected $db;

    public function __construct() {
        $config = require basePath('config/db.php');
        $this->db = new Database($config);
    }

    /**
    *显示登录页面
    *此方法加载登录视图
    *
    *@return void
    */
    public function login(){
        loadView('users/login');
    }

    /**
     *显示注册页面
     *此方法加载注册视图
     *
     *@return void
     */
     public function create(){
         loadView('users/create');
     }
     /**
     *把用户数据进入数据库
     *
     *
     *@return void
     */
     public function store(){
        $name = $_POST['name'];
        $email = $_POST['email'];
        $city = $_POST['city'];
        $province = $_POST['province'];
        $password = $_POST['password'];
        $passwordConfirmation = $_POST['password_confirmation'];

        $errors =[];

        if (!Validation::email($email)) {
            $errors['email'] = '请输入一个合法的电子邮箱地址! ';
        }
        if (!Validation::string($name,2,50)) {
            $errors['name'] = '姓名长度为2到50！ ';
        }
        if (!Validation::string($password,6,50)) {
            $errors['password'] = '密码长度为至少6位! ';
        }
        if (!Validation::match($password, $passwordConfirmation)) {
            $errors['password_confirmation'] = '两次的输入密码不一致! ';
        }
        if (!empty($errors)) {
        loadView('users/create',[
            'errors' => $errors,
            'user' => [
            'name' => $name,
            'email' => $email,
            'city' => $city,
            'province' => $province,
            ]
        ]);
        exit;
        } else {
            $params = [
                'email' => $email
            ];

        $user = $this->db->query('SELECT * FROM users WHERE email = :email', $params)->fetch();

        if ($user) {
            $errors['email'] = '该邮箱已注册！';
            loadView('users/create',[
            'errors' => $errors
            ]);
            exit;
        }
        $params = [
            'name' => $name,
            'email' => $email,
            'city' => $city,
            'province' => $province,
            'password' => password_hash($password, PASSWORD_DEFAULT)
        ];

        $this->db->query('INSERT INTO users (name, email, city, province, password) VALUES (:name, :email, :city,
        :province, :password)', $params);

        $userId = $this->db->conn->lastInsertId();

        Session::set('user', [
        'id' => $userId,
        'name' => $name,
        'email' => $email,
        'city' => $city,
        'province' => $province
        ]);

        redirect('/');
        }
     }

     public function logout(){
        Session::clearAll();

        $params = session_get_cookie_params();

        setcookie('PHPSESSID','', time() - 86400, $params['path'], $params['domain']);

        redirect('/');
     }
     /**
      *电子邮箱
      *
      *
      *@return void
      */
      public function authenticate(){
        $email = $_POST['email'];
        $password = $_POST['password'];

        $errors = [];

        if (!Validation::email($email)) {
            $errors['email'] = '请输入合法的邮箱地址！';
        }
        if (!Validation::string($password,6,50)) {
            $errors['password'] = '密码为至少6位！';
        }
        if (!empty($errors)) {
            loadView('users/login',[
                'errors' =>$errors
        ]);
        exit;
        }
        $params = [
            'email' => $email
        ];

        $user = $this->db->query('SELECT * FROM users WHERE email = :email', $params)->fetch();

        if (!$user) {
            $errors['email'] = '用户不存在或密码错误！';
            loadView('users/login', [
                'errors' => $errors
            ]);
            exit;
        }
        if (!password_verify($password, $user->password)) {
            $errors['email'] = '用户不存在或密码错误！';
            loadView('users/login', [
                'errors' => $errors
            ]);
            exit;
        }
        Session::set('user', [
        'id' => $user->id,
        'name' => $user->name,
        'email' => $user->email,
        'city' => $user->city,
        'province' => $user->province
        ]);

        redirect('/');
      }
}